ABSTRACCIÓN DE
DATOS

“La revolución de la abstracción de datos ha afectado al espectro total del diseño de lenguajes, metodología de la programación y la forma de pensar los programas” (Judy Bishop)



Tipos Abstractos de Datos

Tipos de datos primitivos y derivados

En primer lugar, hay que distinguir entre tipos de datos primitivos y derivados:
Tipos abstractos de datos

Un tipo abstracto de datos (TAD) está formado por dos capas o niveles:
  1. El nivel interior. Es el nivel implementador, que está oculto al usuario. En este nivel se encuentra la estructura de datos. La característica de ocultar los detalles implementadores de un objeto de datos se denomina “encapsulamiento”.

  2. El nivel exterior. Es el nivel conceptual y de utilización, que es la interfaz pública. El interfaz está constituida por un conjunto de operaciones definidas sobre la estructura de datos del nivel interno.
La interfaz pública o externa corresponde al “qué”, a la especificación. La parte privada o interna corresponde al “cómo”, a la implementación.

El TAD tiene la implementación oculta al usuario. Pero si es expuesta, se habla de un tipo de datos “transparente”.

Las operaciones típicas sobre una estructura de datos son: almacenar, recuperar (o acceder), seleccionar, modificar, eliminar, etc. elementos (u objetos) en la estructura de datos. El conjunto de operaciones que pueden realizarse con un TAD es cerrado, es decir, solo se puede acceder a través de la interfaz, que es fija. Por su propia naturaleza, los TADs son estructuras de datos dinámicas.

Un TAD se puede definir como una clase de objetos (o elementos) definidos por una estructura, un conjunto de valores, un conjunto de operaciones y un conjunto de restricciones definidas como precondiciones y postcondiciones.

En POO (Programación Orientada a Objetos), un TAD es una clase de objetos porque la interfaz pública está parametrizada. Una instancia de una clase es un objeto.

Todos los lenguajes de alto nivel tienen TADs predefinidos, pero el usuario puede definir sus propios TADs.


Ejemplos

Estructuras de datos que pueden implementarse como TADs son: conjuntos, secuencias, pilas, colas, vectores, grafos, contenedores, diccionarios, mapas, estructuras algebraicas (grupos, anillos, retículos, etc.), etc. Por ejemplo:
Ventajas de los TADs

Hay dos ventajas principales:
  1. Simplifica la programación, pues permite al programador operar con los datos desde un nivel de abstracción superior, de forma conceptual, sin que tenga necesidad de conocer los detalles de su implementación.

  2. La implementación puede variar con el tiempo (por ejemplo, para mejorar el rendimiento o consumir menos recursos), pero no así el interfaz, por lo que el código fuente queda inalterable.

MENTAL y la Abstracción de Datos

La historia de los lenguajes de programación está ligada a una creciente abstracción. Un proceso de abstracción consiste en centrarse en las características esenciales de algo, prescindiendo de lo particular, accesorio o contingente. El problema fundamental en el diseño de sistemas software es reducir la complejidad, y este objetivo pasa necesariamente por el proceso de abstracción. La primera abstracción que apareció fue la procedimental. Posteriormente fueron apareciendo otras abstracciones: objetos, funciones, reglas, eventos, aspectos, agentes, etc., incluyendo los TADs.
La variable como el TAD más simple

Una variable x se puede considerar un TAD dinámico que tiene dos operaciones:
  1. Almacenar un valor v en la variable x: (x = v).

  2. Acceder al valor de la variable. Se hace simplemente haciendo mención a x:
El siguiente nivel en la complejidad de TAD es una variable parametrizada:
en donde x, y, z pueden ser expresiones cualesquiera. Por ejemplo:

Ejemplo de contenedor

Un contenedor está formado por un conjunto de elementos. Cada elemento tiene una clave y unos datos asociados. La clave y los datos pueden ser tan complejos como se desee. Por ejemplo, una clave podría ser una variable parametrizada. Estamos como en el caso anterior. Ejemplos: En este ejemplo, AñoNacimiento y LugarNacimiento se pueden considerar contenedores.


Ejemplo de pila

Si llamamos s al nombre de la pila y x el valor a añadir, tenemos las siguientes operaciones: La pila se ha implementado como una matriz unidimensional, pero podría haberse implementado como una secuencia o de cualquier otra forma, pero desde el punto de vista del usuario, la interfaz no varía.



Adenda

Historia de los TADs
Bibliografía